ユーザー認証(User Authentication)
ユーザー認証とは、サービスが利用者は本人かを確認する仕組みです。
普段ログインするための認証と、ログインできなくなったときの復旧に分けると整理しやすくなります。
日常的なログインのための認証手段において、中心的な仕組みとしてFIDO認証があります。
具体的には、パスキーやセキュリティキーとよばれているものです。
同様の仕組みとして、パスワード、認証アプリ、SMS認証なども広く使われていますが、セキュリティ上の懸念も存在します。
ログインできなくなったときの復旧手段には、バックアップコード、復旧メール、復旧電話番号があります。
これらは認証手段を失ったときの非常用ルートとして用意されています。
1. ログイン手段
ログインにおいて、サービスは本人確認を行います。
ここでは、現在中心的な手法になりつつあるFIDO認証と、それを補う過渡期・補助的な認証に分けて整理します。
FIDO認証は、公開鍵暗号を使って本人確認を行います。 パスワードやSMSコードのように人間が秘密の文字列を入力するのではなく、端末や認証器の中にある秘密鍵を使ってログインします。
安全性が高く、特に、鍵ペアにより認証が厳密にWebサイトと紐づくため、フィッシング攻撃(偽サイトにパスワードやコードを入力させるタイプの攻撃)に強いです。
パスキー
パスキーは、FIDO認証を一般ユーザーが使いやすい形に実装したログイン手段です。
スマホやPCの画面ロック、指紋認証、顔認証、PINなどで本人確認し、その裏側でFIDO認証が行われます。
顔認証や指紋認証は、端末内の秘密鍵を使うためのローカルな本人確認手段であり、webサービスに送られることはありません。
セキュリティキー
セキュリティキーは、USB、NFC、Bluetoothなどで使う物理的なFIDO認証器です。
YubiKeyのような物理キーを使ってログインします。
パスキーがスマホやPCと結びつくことが多いのに対して、セキュリティキーは物理的な鍵として独立して管理できます。
高い安全性が必要なアカウントでは有力ですが、紛失に備えて予備のキーも登録しておく必要があります。
二段階認証
FIDO認証は、パスワードに追加する2要素目として使われる用途もカバーしています。
パスキーやセキュリティキーはパスワード自体を置き換えるものですが、二段階認証はパスワードを補強する性質のものです。
1.2. パスワード認証
本人のみが知る秘密の文字列を入力することで、本人確認を行う方法です。
問題
問題1:人間による秘密管理の限界
パスワードや認証コードは、ユーザーが見て、覚えて、入力し、場合によってはコピーします。
そのため、フィッシング(偽サイトへの入力による抜き取り)や人為的なミス(メモ、使い回し、スクリーンショット、漏えい、誤送信)といった問題が起こりえます。
問題2:端末や通信経路への依存
SMSは電話番号や通信事業者に依存し、認証アプリはスマホの管理に依存します。
そのため、端末の紛失、機種変更、マルウェア、SIM乗っ取りなどがリスクとなります。
問題3:運用上のリスク
認証アプリを移行し忘れる、SMSを受け取れない、電話番号が変わる、パスワードを忘れる、といった問題も考えられます。
これらはログイン不能や復旧に関わるリスクにつながります。
方式
パスワード
本人だけ知る秘密の文字列でログインする方式です。
広く使われていますが、漏えい、使い回し、推測、フィッシングに弱いという問題があります。
ワンタイムパスワード
短期間だけ有効なコードを使って本人確認する認証方式です。
パスワード認証の安全性を高めるため、追加確認として使われることが多いです。
代表的なものには、TOTP、SMS認証、メール認証コードがあります。
認証アプリ / TOTP:一定時間ごとに変わる6桁程度のコードを表示する仕組み
SMS認証:携帯電話番号に届くコードで本人確認する方式
メール認証コード:メールで届くログインコードで本人確認する方式
偽サイトに入力してしまうと盗まれる可能性があり、FIDO認証やパスキーほどフィッシングに強い方式ではありません。
SMSやメールによるコードは導入しやすい一方で、電話番号やメールアカウント自体の安全性に依存します。
選べる場合は、SMSやメールコードよりも認証アプリのTOTPを優先し、さらに可能であればFIDO認証やパスキーを優先すると安全です。
2. 認証情報の追加・移管
ログインに使う端末、アプリ、認証器、鍵などをアカウントに追加・変更のための手段が用意されています。
例えば、新しいスマホを追加する、パスキーを登録する、セキュリティキーを追加する、認証アプリを移行する、といった操作が含まれます。
2.1. パスキー・セキュリティキーの追加登録
パスキーやセキュリティキーを追加登録すると、その端末や物理キーをログイン手段として使えるようになります。
新しいスマホにパスキーを作成する、予備のセキュリティキーを登録する、といった操作がこれにあたります。
重要なアカウントでは、1つの認証手段だけに依存しないように、複数の認証手段を登録しておくことがあります。
これにより、端末の故障や紛失時にもログイン不能になりにくくなります。
2.2. TOTP認証アプリの追加登録
サービス側が表示するQRコードを認証アプリで読み取ると、そのアプリが以後ワンタイムパスワードを生成できるようになる仕組みがあります。
このQRコードは、ワンタイムパスワードを生成するための設定情報を登録するためのものです。
2.3. 端末/認証器の追加認証
すでにログイン済みの端末やアプリを使って、新しい端末や認証器の追加を確認する方法があります。
この仕組みは、新しい環境を登録するときに、すでに信頼されている環境を確認に使うものです。
QRコード方式
新しい端末に表示されたQRコードを、既存の認証済み端末で読み取ることで、登録を進めます。
QRコードには、登録に必要な情報や、一時的な接続情報が含まれます。
これにより、新しい端末と既存の端末の間で安全な通信経路を作り、新しい端末をアカウントに追加します。
例えば、1Passwordでは、新しい端末に表示されたQRコードを既存の認証済み端末で読み取ることで、端末間に暗号化された通信経路を作ります。その通信経路を通じて、新しい端末が認証器の利用に必要な情報を受け取ります。
コード/通知
確認コードや通知による追加承認では、新しい端末の追加時に、認証済み端末にコード入力欄や通知が表示されます。
利用者が認証コードを入力したり、通知を承認したりすることで、新しい端末が登録されます。
例えばApple Accountでは、新しい端末やブラウザでサインインするとき、信頼済みデバイスに確認コードが表示される仕組みがあります。
3. ログインできなくなったときの復旧手段
スマホを失くした、認証アプリを移行し忘れた、セキュリティキーが壊れた、パスキーを使える端末に入れない、といった場合に備えた仕組みがあります。
3.1. バックアップコード
バックアップコードは、普段の認証手段が使えなくなったときに使う非常用コードです。
認証アプリ、スマホ、セキュリティキー、パスキーを使える端末などを失った場合の復旧に使われます。
バックアップコードは、FIDO認証のような強い認証方式ではありません。
事前に発行された使い捨ての秘密文字列であり、入力して使うため、フィッシングには弱いです。
したがって、日常的に使うものではなく、また、安全な場所に保管する必要があります。
3.2. 復旧メール
復旧メールは、メインのアカウントに入れなくなったときに、本人確認や再設定のために使う別のメールアドレスです。
メインアカウントをFIDO認証で強く守っていても、復旧メールが弱ければ、そこから突破される可能性があります。
そのため、復旧メール自体も強く保護する必要があります。
3.3. 復旧電話番号
復旧電話番号は、ログインできなくなったときの確認や通知に使われる電話番号です。
便利ですが、電話番号はSIM乗っ取り、番号変更、古い番号の放置といった問題があります。
定期的に自分が管理している番号が設定されているか確認する必要があります。